package com.fzf.org.controller;

import com.fzf.org.dto.resp.blog.DraftDTO;
import com.fzf.org.dto.req.draft.DraftReqDTO;
import com.fzf.org.dto.resp.blog.PictureCheckRespDTO;
import com.fzf.org.page.PageRequest;
import com.fzf.org.page.PageResponse;
import com.fzf.org.result.Result;
import com.fzf.org.result.Results;
import com.fzf.org.service.DraftsService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RequestMapping("/blog/draft")
@RestController
@RequiredArgsConstructor
public class DraftsController {

    private final DraftsService draftsService;
    /**
     * 分页展示用户的草稿
     * @param pageRequest 分页参数
     * @return 某一页的草稿DTO实体
     */
    @GetMapping("/draftList")
    Result<PageResponse<DraftDTO>> listUsersDrafts(PageRequest pageRequest) {
        return Results.success(draftsService.listUsersDrafts(pageRequest));
    }

    /**
     * 用户查看一个草稿
     * @param draftID 需要查看的草稿id
     * @return 对应到id的草稿DTO实体
     */
    @GetMapping("/draftDetail")
    Result<DraftDTO> showDraftDetail(@RequestParam("draftID") Long draftID) {
        return Results.success(draftsService.showDraftDetail(draftID));
    }

    /**
     * 用户新建一个空草稿
     * @return 新建的草稿id
     */
    @PostMapping("/createDraft")
    Result<Long> createNewDraft() {
        return Results.success(draftsService.createNewDraft());
    }


    /**
     * 保存此blog草稿
     * @param draftReqDTO 具体的草稿对象，包含 草稿id、草稿title、草稿content
     * @return
     */
    @PostMapping("/saveDraft")
    Result<Void> saveBlogDraft(@RequestBody DraftReqDTO draftReqDTO) {
        draftsService.saveBlogDraft(draftReqDTO);
        return Results.success();
    }

    /**
     * 用户删除一个草稿
     * @param draftID 需要删除的草稿id
     * @return
     */
    @DeleteMapping("/delDraft")
    Result<Void> delBlogDraft(@RequestParam("draftID") Long draftID) {
        draftsService.delBlogDraft(draftID);
        return Results.success();
    }

    /**
     * 发布一个草稿，转为正式的blog内容
     * @param draft 具体的草稿对象，包含 草稿id、草稿title、草稿content
     * @return 返回一个新建的blog的id值，可以用这个id访问发布的blog
     */
    @PostMapping("/pubDraft")
    Result<Long> publishBlogDraft(@RequestBody DraftReqDTO draft) {
        return Results.success(draftsService.pubBlogDraft(draft));
    }

    /**
     * 异步接收前端发送的图片
     * @param pic 图片
     * @param draftId 保存的草稿id
     * @return
     */
    @PostMapping("/picture")
    Result<PictureCheckRespDTO> uploadPic(@RequestParam("pic") MultipartFile pic, @RequestParam("draftId") Long draftId) {
        return Results.success(draftsService.uploadPic(pic, draftId));
    }

}
